Método de Simpson Composto

A regra de Simpson baseia-se em aproximar a integral definida pela área sob arcos de parábola que interpolam a função. Origem: Wikipédia

image

Formulação do Método

n:Intervalos Igualmente Espaçados> OBS:A medida que o valor de n aumenta a integração de f(x) tende ao valor real

$$h = \dfrac{x_m - x_0}{n}$$

$$\int_{a}^{b} f(x) \,dx \approx \dfrac{1}{3}h\{[f(x_0) + f(x_m)] +4[f(x_1)+ $$ $$ f(x_3) + \dots + f(x_{m-1})] + 2[f(x_2) + f(x_4)+ \dots + f(x_{m-2}) ]\}$$

ou

$${\displaystyle {\begin{aligned}\int _{a}^{b}f(x)\,dx&\approx {\frac {h}{3}}\sum _{j=1}^{n/2}{\big [}f(x_{2j-2})+4f(x_{2j-1})+f(x_{2j}){\big ]}\\&={\frac {h}{3}}{\bigg [}f(x_{0})+2\sum _{j=1}^{n/2-1}f(x_{2j})+4\sum _{j=1}^{n/2}f(x_{2j-1})+f(x_{n}){\bigg ]},\end{aligned}}}$$


Implementação do Algorítimo em Python

Biblioteca Python

Importando a Biblioteca Python que será usada no código.

import numpy as np
Código Python

Código para integração numérica usando o Método de Simpson Composto.

Onde:

  • [x_0] Limite inferior
  • [x_m] Limite superior
  • [ f ] função que será integrada
  • [ n ] sub-intervalos - OBS:Tem que ser um valor PAR
def metodo_simpson(f, x_0, x_m, n):
    # O passo de integração, n é a quantidade de subintervalos que queremos.
    # veridicando se [n] é PAR, condição necessária para o método simpson.
    if (n%2 != 0):
        n -= 1
        
    h = (x_m - x_0)/ float(n)
    
    f_x0 = f(x_0)
    f_xm = f(x_m)
    
    x = x_0
    x += h
    index = 1
    somatorio = 0.0
    while (x < x_m):
        if (index%2 != 0):
            somatorio += 4*f(x)
        else:
            somatorio += 2*f(x)
        index += 1
        x += h

    integral = (h /3.0)*(f_x0 + f_xm + somatorio)
    print('\n***************************'+'\033[1m'+ ' SAÍDA ' + '\033[0m'+'***************************\n')
    print(f"\tIntegral               ≈ {integral}")
    print(f"\tSubintervalos [n]      = {n}")
    print(f"\tPasso [h]              = {h}")
    print(f"\tLimite Inferior [x_0]  = {x_0}")
    print(f"\tLimite Superior [x_m]  = {x_m}")
    print("\n*************************************************************\n")
    

Exemplo 01

Aplicando o Método de Simpsom Composto ao exemplo abaixo, temos:

$$\int_{x_0}^{x_m} 2x-e^x \,dx$$

$$\int_{-1}^{2} 2x-e^x \,dx \approx \dfrac{1}{3}h\{[2x_0-e^{x_0} + 2x_m-e^{x_m}] + $$

$$4[2x_1-e^{x_1} + 2x_3-e^{x_3} + \dots + 2x_{m-1}-e^{x_{m-1}}] + $$

$$2[2x_2-e^{x_2} + 2x_4-e^{x_4}+ \dots + 2x_{m-2}-e^{x_{m-2}} ]\}$$


Código

f = lambda x: 2*x-np.exp(x)

# Resolvendo a integral usando o método de simpson composto
x_0 = 0; x_m = 2; n = 10
metodo_simpson(f, x_0, x_m, n)
*************************** SAÍDA ***************************

	Integral               ≈ -2.840986767759475
	Subintervalos [n]      = 10
	Passo [h]              = 0.2
	Limite Inferior [x_0]  = 0
	Limite Superior [x_m]  = 2

*************************************************************


Exemplo 02

Aplicando o Método de Simpsom Composto ao exemplo abaixo, temos:

$$\int_{a}^{b} cos(x) \,dx$$

$$\int_{a}^{b} 2x-e^x \,dx \approx \dfrac{1}{3}h\{[cos(x_0) + cos(x_m)] + $$

$$4[cos(x_1) + cos(x_3) + \dots + cos(x_{m-1})] + $$

$$2[cos(x_2) + cos(x_4)+ \dots + cos(x_{m-2}) ]\}$$


Código

f = lambda x: np.cos(x)

# Resolvendo a integral usando o método de simpson composto
x_0 = 0; x_m = 2; n = 10
metodo_simpson(f, x_0, x_m, n)
*************************** SAÍDA ***************************

	Integral               ≈ 0.85381930324762
	Subintervalos [n]      = 10
	Passo [h]              = 0.2
	Limite Inferior [x_0]  = 0
	Limite Superior [x_m]  = 2

*************************************************************


Exemplo 03:

Aplicando o Método de Simpsom Composto ao exemplo abaixo, temos:

$$\int_{a}^{b} x^2 \,dx$$

$$\int_{a}^{b} x^2 \,dx \approx \dfrac{1}{3}h\{[x_0^2 + x_m^2] + 4[x_1^2 + x_3^2 + \dots + x_{m-1}^2] + $$

$$2[x_2^2 + x_4^2 + \dots + x_{m-2}^2 ]\}$$


Código

f = lambda x: x**2

# Resolvendo a integral usando o método de simpson composto
x_0 = 0; x_m = 2; n = 10
metodo_simpson(f, x_0, x_m, n)
*************************** SAÍDA ***************************

	Integral               ≈ 3.2
	Subintervalos [n]      = 10
	Passo [h]              = 0.2
	Limite Inferior [x_0]  = 0
	Limite Superior [x_m]  = 2

*************************************************************